package com.ssm.sport.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ssm.sport.entity.Order;
import com.ssm.sport.vo.OrderVO;

import java.util.List;

/**
 * 订单服务接口
 */
public interface OrderService {
    
    /**
     * 创建订单
     * @param userId 用户ID
     * @param shippingId 收货地址ID
     * @return 订单详情
     */
    OrderVO createOrder(Integer userId, Integer shippingId);
    
    /**
     * 取消订单
     * @param userId 用户ID
     * @param orderNo 订单编号
     * @return 是否成功
     */
    boolean cancelOrder(Integer userId, String orderNo);
    
    /**
     * 获取订单商品信息
     * @param userId 用户ID
     * @param orderNo 订单编号
     * @return 订单详情
     */
    OrderVO getOrderDetail(Integer userId, String orderNo);
    
    /**
     * 获取订单列表
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 订单列表
     */
    Page<OrderVO> getOrderList(Integer userId, int pageNum, int pageSize);
    
    /**
     * 管理员获取所有订单列表
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 订单列表
     */
    Page<OrderVO> getAllOrderList(int pageNum, int pageSize);
    
    /**
     * 管理员订单发货
     * @param orderNo 订单编号
     * @return 是否成功
     */
    boolean sendOrder(String orderNo);
    
    /**
     * 支付订单
     * @param userId 用户ID
     * @param orderNo 订单编号
     * @return 是否成功
     */
    boolean payOrder(Integer userId, String orderNo);
    
    /**
     * 获取总订单数
     * @return 订单总数
     */
    long count();
    
    /**
     * 获取今日订单数
     * @return 今日订单数
     */
    long getTodayOrderCount();
    
    /**
     * 获取待发货订单数
     * @return 待发货订单数
     */
    long getPendingOrderCount();
    
    /**
     * 获取总销售额
     * @return 总销售额
     */
    java.math.BigDecimal getTotalSales();
} 